package com.ss.summer.service;

import com.ss.summer.service.support.SummerAppoint;

/**
 * 审批流操作
 * @author xia17
 * @date 2019/7/24 18:38
 */
public interface SummerExecute {

    /**
     * 开启审批流,如果已存在抛出异常，使用restart方法重启流程。
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @return
     */
    SummerAppoint start(Integer applyId, String apiPath);


    /**
     * 开启审批流,如果已存在抛出异常，使用restart方法重启流程。指定审核节点
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param nodeId 指定审核节点
     * @return
     */
    SummerAppoint startToNode(Integer applyId, String apiPath, Integer nodeId);



    /**
     * 重新开启流程，只能提交到用户第一次提交到的节点。
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @return
     */
    void restart(Integer applyId, String apiPath);


    /**
     * 通过，下一节点审核
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    SummerAppoint pass(Integer applyId, String apiPath, String member, String opinion);



    /**
     * 通过。并指定审核节点。
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param nodeId 指定审核节点
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    SummerAppoint passToNode(Integer applyId, String apiPath, Integer nodeId, String member, String opinion);



    /**
     * 直接通过。结束流程
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    void passToEnd(Integer applyId, String apiPath, String member, String opinion);

    /**
     * 拒绝
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    void fail(Integer applyId, String apiPath, String member, String opinion);

    /**
     * 退回提交人编辑。
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    void back(Integer applyId, String apiPath, String member, String opinion);

    /**
     * 退回至上一节点
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param member 审核人
     * @param opinion 意见
     * @return
     */
    void backToLast(Integer applyId, String apiPath, String member, String opinion);

    /**
     * 退回至指定节点。
     * @param applyId 申请主键id
     * @param apiPath 审核流凭证
     * @param nodeId 指定审核节点
     * @param member 指定节点id
     * @param opinion 意见
     * @return
     */
    void backToNode(Integer applyId, String apiPath, Integer nodeId, String member, String opinion);
}
